package com.uppfind.framework.utils;

import java.util.Calendar;

/**
 * 身份证工具
 * Created by xuliugen on 16/04/10.
 */
public class IdCardUtil {

//    /**
//     * 判断是否是有效的18位居民身份证号码
//     * @param idCardNum 18位居民身份证号码
//     * @return 是否为有效的身份证号码
//     */
//    public static boolean isIdCard(String idCardNum) {
//        if (idCardNum == null) {
//            return false;
//        }
//        if (idCardNum.length() == 18) {
//
//            String REGEX_IDCARD = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$";
//
//            Pattern pattern = Pattern.compile(idCardNum);
//            Matcher matcher = pattern.matcher(REGEX_IDCARD);
//            return matcher.matches();
//        }
//        return false;
//    }

    /**
     * 根据输入的身份证号获取用户的年龄
     * @param idcard 用户的身份证号码
     * @return
     */
    public static String calculateAge(String idcard) {
        String birthyear = idcard.substring(6, 10);
        Calendar cl = Calendar.getInstance();
        String age = (cl.get(Calendar.YEAR) - Integer.valueOf(birthyear)) + "";
        return age;
    }

    /**
     * 从身份证号获取性别
     * @param idcard 身份证号
     * @return 性别代码
     * @throws Exception 无效的身份证号码
     */
    public static Sex getGenderFromPersonIDCode(String idcard) throws Throwable {
        char sex = idcard.charAt(16);
        return sex % 2 == 0 ? Sex.Female : Sex.Male;
    }

    /**
     * 性别
     * @author ShenHuaJie
     */
    public enum Sex {
        /**
         * 未知
         */
        Other("未知", 0),
        /**
         * 男
         */
        Male("男", 1),
        /**
         * 女
         */
        Female("女", 2);

        private String name;
        private Integer value;

        private Sex(String name, Integer value) {
            this.name = name;
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

        public String toString() {
            return this.name;
        }
    }
}
